package com.electromagnetic.industry.software.manage.pojo.models;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.electromagnetic.industry.software.common.util.EleCommonUtil;
import com.electromagnetic.industry.software.common.util.EleIdCreator;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import lombok.experimental.FieldNameConstants;

@EqualsAndHashCode(callSuper = true)
@TableName("ed_file_info")
@Accessors(chain = true)
@Data
@FieldNameConstants
public class EdFileInfo extends BaseModel {

    /**
     * 主键ID
     */
    @TableField(value = "id")
    private String id;
    /**
     * 文件id，如果是第一个版本，则和id一致，同一个文件不同版本，file_id是一致的
     */
    @TableField(value = "file_id")
    private String fileId;
    /**
     * 父目录id
     */
    @TableField(value = "parent_id")
    private String parentId;
    /**
     * 文件类型
     */
    @TableField(value = "file_type")
    private String fileType;
    /**
     * 文件名
     */
    @TableField(value = "file_name")
    private String fileName;
    /**
     * 文件备注
     */
    @TableField(value = "file_note")
    private String fileNote;
    /**
     * 文件内容
     */
    @TableField(value = "file_content")
    private String fileContent;
    /**
     * 文件当前版本，文件版本号默认从100开始
     */
    @TableField(value = "file_version")
    private Integer fileVersion;
    /**
     * 文件时间，文件编号的最后15位，精确到毫秒
     */
    @TableField(value = "file_time")
    private String fileTime;
    /**
     * 文件路径，指到文件的父目录，有各个父目录的id加下划线组成
     */
    @TableField(value = "file_path")
    private String filePath;
    /**
     * 数据类型，0-文件夹 1-文件
     */
    @TableField(value = "data_type")
    private Integer dataType;
    /**
     * 数据状态，0-未发布 1-已发布 2-占用 3-待删除
     */
    @TableField(value = "data_status")
    private Integer dataStatus;
    /**
     * 文件的上一个版本号
     */
    @TableField(value = "pre_version")
    private Integer preVersion;

    /**
     * 保存状态，0-上传中 1-上传成功 2-上传失败
     */
    @TableField(value = "save_status")
    private Integer saveStatus;
    /**
     * 文件大小
     */
    @TableField(value = "file_size")
    private Long fileSize;
    /**
     * 文件夹顺序
     */
    @TableField(value = "sort")
    private Integer sort;
    /**
     * 文件编码
     */
    @TableField(value = "file_code")
    private String fileCode;
    /**
     * 数据的归属：0-》上传的文件或者新建的文件夹 1-》系统管理员创建的层级 2-》用户自定义的层级
     */
    @TableField(value = "data_own")
    private Integer dataOwn;

    /**
     * 当一个文件作废时，其所有的历史文件也会跟着作废，此时该文件及其历史文件的all_deleted=true
     **/
    @TableField(value = "all_deleted")
    private Boolean allDeleted;

    /**
     * 当文件被管理员永久物理删除，此时为true
     */
    @TableField(value = "permanent_deleted")
    private Boolean permanentDeleted;

    /**
     * 模板编码
     */
    @TableField(value = "template_code")
    private String templateCode;

    public void newInit() {
        String newFileDbId = EleIdCreator.createSnowflakeId();
        String fileTime = EleCommonUtil.getNowTimeStr();
        this.setId(newFileDbId);
        this.setFileTime(fileTime);
        this.setFileId(newFileDbId);
    }
}
